#include "parser.h"
#include "doctest.h"


TEST_CASE("[Parser::IdOrToken]") {
  auto parser = Parser("", "   var", nullptr, nullptr);

  for (auto e : keywordsToken) {
    CHECK_EQ(parser.idOrToken(e.first), e.second);
  }
}

TEST_CASE("[Parser::skipBlanks]") {
  
  SUBCASE("skipBlanks space") {
    auto parser = Parser("", "   var", nullptr, nullptr);
    parser.skipBlanks();
    CHECK(parser.curChar == 'v');
  }

  SUBCASE("skipBlanks \\n") {
    auto parser = Parser("", "\nvar", nullptr, nullptr);
    parser.skipBlanks();
    CHECK(parser.curChar == 'v');
  }
}

TEST_CASE("[Parser::parseId]") {
  SUBCASE("simple parse 1") {
    auto parser = Parser("", "\nvar", nullptr, nullptr);
    parser.skipBlanks();
    parser.parseId(Token::TokenType::UNKNOWN);
    CHECK(parser.curToken.type == Token::TokenType::VAR);
  }

  SUBCASE("simple parse 2") {
    auto parser = Parser("", "var", nullptr, nullptr);
    parser.skipBlanks();
    parser.parseId(Token::TokenType::UNKNOWN);
    CHECK(parser.curToken.type == Token::TokenType::VAR);
  }

  SUBCASE("simple parse 3") {
    auto parser = Parser("", "if", nullptr, nullptr);
    parser.skipBlanks();
    parser.parseId(Token::TokenType::UNKNOWN);
    CHECK(parser.curToken.type == Token::TokenType::IF);
  }

  SUBCASE("simple parse 4") {
    auto parser = Parser("", "sada", nullptr, nullptr);
    parser.skipBlanks();
    parser.parseId(Token::TokenType::UNKNOWN);
    CHECK(parser.curToken.type == Token::TokenType::ID);
  }
  
}
